package org.example;

import org.example.bao1.dongtaidaili;
import org.example.bao1.studet;

import java.lang.reflect.Proxy;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        //动态代理步骤，先获取实体类（目标类）对象
        studet dx1=new studet();
        //通过有残构造创建inovcationhandler的实现类对象,把实体类对象传进去，这里就把实体类的那些参数和方法传过来了？嗯，传给invok的method参数，不是在代理类对象那里传的，
        dongtaidaili dx2=new dongtaidaili(dx1);
//用jdk的proxy类调用静态方法三个参数，创建代理对象dx3，但是这个代理对象是有归属的，归属于你要代理的目标类，比如称为school接口的代理对象
//参数一，目标类的类加载器，参数二，目标类实现了哪些接口，参数三，目标类对应的inovcationhandler的实现类对象，你的invoke功能写在哪个类的对象
        //一般是通过目标类的反射方法获得参数
        studet dx3=(studet)
        Proxy.newProxyInstance(
                dx1.getClass().getClassLoader(),
                dx1.getClass().getInterfaces(),
                dx2
        );
//用代理对象（帮实体类去调方法的对象）取调目标类的方法，不是直接调，是把调的这个实体类的方法通过dx1和dx2（inovcationhandler的实现类对象）
// 传给inovcationhandler的实现类中的Method method这个参数，这个参数就变成了实体类的方法了，
        //参数传给inovcationhandler的实现类中的args  dx3是传给proxy？
        //饶了一圈通过invoke去执行的实体类方法
        dx3.setXuehao(3);


    }
}
